Dynamically providing application analytic information

ABSTRACT

Methods and systems for dynamically providing application analytic information are provided herein. The method includes inserting instrumentation points into an application file via an application analytic service and dynamically determining desired instrumentation points from which to collect application analytic data. The method also includes receiving, at the application analytic service, the application analytic data corresponding to the desired instrumentation points and analyzing the application analytic data to generate application analytic information. The method further includes sending the application analytic information to a client computing device.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of co-pending U.S. patent applicationSer. No. 13/429,451, filed Mar. 26, 2012, and entitled “DYNAMICALLYPROVIDING APPLICATION ANALYTIC INFORMATION”, the application of which isincorporated herein in its entirety by reference.

BACKGROUND

Application developers often use application analytic services tocollect tracking data about how an application, such as an applicationon a mobile phone, is being used. For example, application analyticservices may determine the location from which an application is beingused, the length of time each session of an application lasts, and thespecific features of the application that are being used, among others.Developers may use this data to target their subsequent developmentefforts.

To install application analytic services, developers typically includecode snippets in their applications. Such code snippets may upload theapplication tracking data to an analytic service provider. A number ofvendors provide application analytic services that bundle basicapplication analytics, such as usage statistics and location data, witha mobile advertisement component. However, such application analyticservices fail to provide performance profiling data. In addition, suchapplication analytic services only provide for the collection ofinstrumentation data relating to the application in a static manner,which may not be sufficient to target the specific information that isdesired by each developer.

SUMMARY

The following presents a simplified summary of the innovation in orderto provide a basic understanding of some aspects described herein. Thissummary is not an extensive overview of the claimed subject matter. Itis intended to neither identify key nor critical elements of the claimedsubject matter nor delineate the scope of the subject innovation. Itssole purpose is to present some concepts of the claimed subject matterin a simplified form as a prelude to the more detailed description thatis presented later.

An embodiment provides a method for dynamically providing applicationanalytic information. The method includes inserting instrumentationpoints into an application file via an application analytic service anddynamically determining desired instrumentation points from which tocollect application analytic data. The method also includes receiving,at the application analytic service, the application analytic datacorresponding to the desired instrumentation points and analyzing theapplication analytic data to generate application analytic information.The method further includes sending the application analytic informationto a client computing device.

Another embodiment provides a system for dynamically providingapplication analytic information. The system includes a processor thatis adapted to execute stored instructions and a system memory. Thesystem memory includes code configured to insert instrumentation pointsinto an application file via an application analytic service anddynamically activate or deactivate each of the instrumentation points,wherein active instrumentation points include instrumentation points forwhich a collection of application analytic data is desired. The systemmemory also includes code configured to receive the application analyticdata corresponding to the active instrumentation points, analyze theapplication analytic data to determine application analytic information,and send the application analytic information to a client computingdevice.

In addition, another embodiment provides one or more non-transitory,computer-readable storage media for storing computer-readableinstructions. The computer-readable instructions provide a dynamicapplication analytic system when executed by one or more processingdevices. The computer-readable instructions include code configured toinsert instrumentation points into an application file and dynamicallyassign an active status or an inactive status to each of theinstrumentation points based on feedback from a client. Thecomputer-readable instructions also include code configured to receivedata corresponding to the instrumentation points with the active status,generate application analytic information from the data, and send theapplication analytic information to a computing device that is beingused by the client.

This Summary is provided to introduce a selection of concepts in asimplified form; these concepts are further described below in theDetailed Description. This Summary is not intended to identify keyfeatures or essential features of the claimed subject matter, nor is itintended to be used to limit the scope of the claimed subject matter.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram of a networking environment in which a systemand method for dynamically providing application analytic informationmay be implemented in accordance with embodiments;

FIG. 2 is a block diagram of a computing environment that may be used toimplement a system and method for dynamically providing applicationanalytic information in accordance with embodiments;

FIG. 3 is a block of a method for binary rewriting of an applicationfile that may be used in accordance with embodiments;

FIG. 4 is a block diagram of a basic application analytic system thatmay be used to dynamically provide application analytic information inaccordance with embodiments;

FIG. 5 is a block diagram of a custom application analytic system thatmay be used to dynamically provide application analytic information inaccordance with embodiments;

FIG. 6 is a block diagram of an automatic application analytic systemthat may be used to dynamically and automatically provide applicationanalytic information in accordance with embodiments; and

FIG. 7 is a process flow diagram showing a method for dynamicallyproviding application analytic information in accordance withembodiments.

The same numbers are used throughout the disclosure and figures toreference like components and features. Numbers in the 100 series referto features originally found in FIG. 1, numbers in the 200 series referto features originally found in FIG. 2, numbers in the 300 series referto features originally found in FIG. 3, and so on.

DETAILED DESCRIPTION

Embodiments disclosed herein set forth a method and system fordynamically providing application analytic information to a client viaan application analytic service. This may be accomplished by insertingapplication analytic program code into specific points within anapplication file that includes the application program code, anddetermining whether each of the points is to be activated ordeactivated. In various embodiments, each point corresponds to aspecific function within the application program code. Data may then becollected from the activate points, and application analytic informationmay be generated from the data. Such application analytic informationmay include the number of devices on which the application is being runor has been installed, the number of times the application has crashed,and the manners in which users are using the application, among others.

In various embodiments, the application analytic information is providedto a client computing device that is being used by a particular client,such as, for example, the developer of the particular application. Insome embodiments, developers use the application analytic information totarget development efforts in order to improve the quality of theparticular application. For example, the developer may add or deletefeatures from an application, or may add additional backend servers tosupport a large number of users.

As a preliminary matter, some of the figures describe concepts in thecontext of one or more structural components, variously referred to asfunctionality, modules, features, elements, etc. The various componentsshown in the figures can be implemented in any manner, for example, bysoftware, hardware (e.g., discreet logic components, etc.), firmware,and so on, or any combination of these implementations. In oneembodiment, the various components may reflect the use of correspondingcomponents in an actual implementation. In other embodiments, any singlecomponent illustrated in the figures may be implemented by a number ofactual components. The depiction of any two or more separate componentsin the figures may reflect different functions performed by a singleactual component. FIG. 1, discussed below, provides details regardingone system that may be used to implement the functions shown in thefigures.

Other figures describe the concepts in flowchart form. In this form,certain operations are described as constituting distinct blocksperformed in a certain order. Such implementations are exemplary andnon-limiting. Certain blocks described herein can be grouped togetherand performed in a single operation, certain blocks can be broken apartinto plural component blocks, and certain blocks can be performed in anorder that differs from that which is illustrated herein, including aparallel manner of performing the blocks. The blocks shown in theflowcharts can be implemented by software, hardware, firmware, manualprocessing, and the like, or any combination of these implementations.As used herein, hardware may include computer systems, discreet logiccomponents, such as application specific integrated circuits (ASICs),and the like, as well as any combinations thereof.

As to terminology, the phrase “configured to” encompasses any way thatany kind of functionality can be constructed to perform an identifiedoperation. The functionality can be configured to perform an operationusing, for instance, software, hardware, firmware and the like, or anycombinations thereof.

The term “logic” encompasses any functionality for performing a task.For instance, each operation illustrated in the flowcharts correspondsto logic for performing that operation. An operation can be performedusing, for instance, software, hardware, firmware, etc., or anycombinations thereof.

As utilized herein, terms “component,” “system,” “client” and the likeare intended to refer to a computer-related entity, either hardware,software (e.g., in execution), and/or firmware, or a combinationthereof. For example, a component can be a process running on aprocessor, an object, an executable, a program, a function, a library, asubroutine, and/or a computer or a combination of software and hardware.

By way of illustration, both an application running on a server and theserver can be a component. One or more components can reside within aprocess and a component can be localized on one computer and/ordistributed between two or more computers. The term “processor” isgenerally understood to refer to a hardware component, such as aprocessing unit of a computer system.

Furthermore, the claimed subject matter may be implemented as a method,apparatus, or article of manufacture using standard programming and/orengineering techniques to produce software, firmware, hardware, or anycombination thereof to control a computer to implement the disclosedsubject matter. The term “article of manufacture” as used herein isintended to encompass a computer program accessible from anynon-transitory computer-readable device, or media.

Non-transitory computer-readable storage media can include but are notlimited to magnetic storage devices (e.g., hard disk, floppy disk, andmagnetic strips, among others), optical disks (e.g., compact disk (CD),and digital versatile disk (DVD), among others), smart cards, and flashmemory devices (e.g., card, stick, and key drive, among others). Incontrast, computer-readable media generally (i.e., not necessarilystorage media) may additionally include communication media such astransmission media for wireless signals and the like.

In order to provide context for implementing various aspects of theclaimed subject matter, FIGS. 1-2 and the following discussion areintended to provide a brief, general description of a computingenvironment in which the various aspects of the subject innovation maybe implemented. For example, a method and system for providingapplication analytic information to developers can be implemented insuch a computing environment. While the claimed subject matter has beendescribed above in the general context of computer-executableinstructions of a computer program that runs on a local computer orremote computer, those of skill in the art will recognize that thesubject innovation also may be implemented in combination with otherprogram modules. Generally, program modules include routines, programs,components, data structures, etc., that perform particular tasks orimplement particular abstract data types.

Moreover, those of skill in the art will appreciate that the subjectinnovation may be practiced with other computer system configurations,including single-processor or multi-processor computer systems,minicomputers, mainframe computers, as well as personal computers,hand-held computing devices, microprocessor-based or programmableconsumer electronics, and the like, each of which may operativelycommunicate with one or more associated devices. The illustrated aspectsof the claimed subject matter may also be practiced in distributedcomputing environments wherein certain tasks are performed by remoteprocessing devices that are linked through a communications network.However, some, if not all, aspects of the subject innovation may bepracticed on stand-alone computers. In a distributed computingenvironment, program modules may be located in local or remote memorystorage devices.

FIG. 1 is a block diagram of a networking environment 100 in which asystem and method for dynamically providing application analyticinformation may be implemented in accordance with embodiments. Thenetworking environment 100 includes one or more client(s) 102. Theclient(s) 102 can be hardware and/or software (e.g., threads, processes,or computing devices). The networking environment 100 also includes oneor more server(s) 104. The server(s) 104 can be hardware and/or software(e.g., threads, processes, or computing devices). The servers 104 canhouse threads to perform search operations by employing the subjectinnovation, for example.

One possible communication between a client 102 and a server 104 can bein the form of a data packet adapted to be transmitted between two ormore computer processes. The networking environment 100 includes acommunication framework 108 that can be employed to facilitatecommunications between the client(s) 102 and the server(s) 104. Theclient(s) 102 are operably connected to one or more client data store(s)110 that can be employed to store information local to the client(s)102. The client data store(s) 110 may be stored in the client(s) 102, ormay be located remotely, such as in a cloud server. Similarly, theserver(s) 104 are operably connected to one or more server data store(s)106 that can be employed to store information local to the servers 104.

FIG. 2 is a block diagram of a computing environment 200 that may beused to implement a system and method for dynamically providingapplication analytic information in accordance with embodiments. Thecomputing environment 200 includes a computer 202. The computer 202includes a processing unit 204, a system memory 206, and a system bus208. The system bus 208 couples system components including, but notlimited to, the system memory 206 to the processing unit 204. Theprocessing unit 204 can be any of various available processors. Dualmicroprocessors and other multiprocessor architectures also can beemployed as the processing unit 204.

The system bus 208 can be any of several types of bus structures,including the memory bus or memory controller, a peripheral bus orexternal bus, or a local bus using any variety of available busarchitectures known to those of ordinary skill in the art. The systemmemory 206 is non-transitory, computer-readable media that includesvolatile memory 210 and non-volatile memory 212. The basic input/outputsystem (BIOS), containing the basic routines to transfer informationbetween elements within the computer 202, such as during start-up, isstored in non-volatile memory 212. By way of illustration, and notlimitation, non-volatile memory 212 can include read-only memory (ROM),programmable ROM (PROM), electrically-programmable ROM (EPROM),electrically-erasable programmable ROM (EEPROM), or flash memory.

Volatile memory 210 includes random access memory (RAM), which acts asexternal cache memory. By way of illustration and not limitation, RAM isavailable in many forms, such as static RAM (SRAM), dynamic RAM (DRAM),synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhancedSDRAM (ESDRAM), SynchLink™ DRAM (SLDRAM), Rambus® direct RAM (RDRAM),direct Rambus® dynamic RAM (DRDRAM), and Rambus® dynamic RAM (RDRAM).

The computer 202 also includes other non-transitory, computer-readablemedia, such as removable/non-removable, volatile/non-volatile computerstorage media. FIG. 2 shows, for example, a disk storage 214. Diskstorage 214 includes, but is not limited to, devices like a magneticdisk drive, floppy disk drive, tape drive, Jaz drive, Zip drive, LS-100drive, flash memory card, or memory stick.

In addition, disk storage 214 can include storage media separately or incombination with other storage media including, but not limited to, anoptical disk drive such as a compact disk ROM device (CD-ROM), CDrecordable drive (CD-R Drive), CD rewritable drive (CD-RW Drive) or adigital versatile disk ROM drive (DVD-ROM). To facilitate connection ofthe disk storage 214 to the system bus 208, a removable or non-removableinterface is typically used, such as interface 216.

It is to be appreciated that FIG. 2 describes software that acts as anintermediary between users and the basic computer resources described inthe computing environment 200. Such software includes an operatingsystem 218. The operating system 218, which can be stored on diskstorage 214, acts to control and allocate resources of the computer 202.

System applications 220 take advantage of the management of resources bythe operating system 218 through program modules 222 and program data224 stored either in system memory 206 or on disk storage 214. It is tobe appreciated that the claimed subject matter can be implemented withvarious operating systems or combinations of operating systems.

A user enters commands or information into the computer 202 throughinput devices 226. Input devices 226 include, but are not limited to, apointing device (such as a mouse, trackball, stylus, or the like), akeyboard, a microphone, a joystick, a satellite dish, a scanner, a TVtuner card, a digital camera, a digital video camera, a web camera, orthe like. The input devices 226 connect to the processing unit 204through the system bus 208 via interface port(s) 228. Interface port(s)228 include, for example, a serial port, a parallel port, a game port,and a universal serial bus (USB). Output device(s) 230 may also use thesame types of ports as input device(s) 226. Thus, for example, a USBport may be used to provide input to the computer 202 and to outputinformation from the computer 202 to an output device 230.

An output adapter 232 is provided to illustrate that there are someoutput devices 230 like monitors, speakers, and printers, among otheroutput devices 230, which are accessible via the output adapters 232.The output adapters 232 include, by way of illustration and notlimitation, video and sound cards that provide a means of connectionbetween the output device 230 and the system bus 208. It can be notedthat other devices and/or systems of devices provide both input andoutput capabilities, such as remote computer(s) 234.

The computer 202 can be a server hosting an event forecasting system ina networking environment, such as the networking environment 100, usinglogical connections to one or more remote computers, such as remotecomputer(s) 234. The remote computer(s) 234 may be client systemsconfigured with web browsers, PC applications, mobile phoneapplications, and the like. The remote computer(s) 234 can be a personalcomputer, a server, a router, a network PC, a workstation, amicroprocessor based appliance, a mobile phone, a peer device or othercommon network node and the like, and typically includes many or all ofthe elements described relative to the computer 202. For purposes ofbrevity, the remote computer(s) 234 is illustrated with a memory storagedevice 236. Remote computer(s) 234 is logically connected to thecomputer 202 through a network interface 238 and then physicallyconnected via a communication connection 240.

Network interface 238 encompasses wire and/or wireless communicationnetworks such as local-area networks (LAN) and wide-area networks (WAN).LAN technologies include Fiber Distributed Data Interface (FDDI), CopperDistributed Data Interface (CDDI), Ethernet, Token Ring and the like.WAN technologies include, but are not limited to, point-to-point links,circuit switching networks like Integrated Services Digital Networks(ISDN) and variations thereon, packet switching networks, and DigitalSubscriber Lines (DSL).

Communication connection(s) 240 refers to the hardware/software employedto connect the network interface 238 to the system bus 208. Whilecommunication connection 240 is shown for illustrative clarity insidecomputer 202, it can also be external to the computer 202. Thehardware/software for connection to the network interface 238 mayinclude, for example, internal and external technologies such as mobilephone switches, modems including regular telephone grade modems, cablemodems and DSL modems, ISDN adapters, and Ethernet cards.

FIG. 3 is a block of a method 300 for binary rewriting of an applicationfile that may be used in accordance with embodiments. In variousembodiments, the method 300 is used to insert application analytic codeinto the application file. The method begins at block 302, at which anapplication file containing the program code for a particularapplication is received. The application file may be in any type offile, such as, for example, a zipped file. In addition, the applicationfile may be a binary file. The application file may be received at anapplication analytic service, as discussed further below with respect toFIGS. 4 and 5. In various embodiments, the application analytic serviceis hosted within an online marketplace.

At block 304, the application file may be unpacked. Once the applicationfile has been unpacked, the application manifest, which may includemetadata files and property files, for example, may be located withinthe unpacked application file.

At block 306, an application analytic library may be inserted into theapplication file. The application analytic library is an agent that iscapable of collecting application analytic information frominstrumentation points within the application file, as discussed furtherwith respect to block 308. In various examples, the insertion of theapplication analytic library into the application file may be performedby a rewriter of the application analytic service.

At block 308, binary rewriting of the application file may be performedto insert the application analytic code. The insertion of theapplication analytic code may provide the application analytic servicewith the ability to collect application analytic data relating to theapplication. In various examples, the binary rewriting of theapplication file may also be performed by the rewriter of theapplication analytic service.

At block 310, the application file may be repacked to obtain a newapplication file. The new application file may include applicationanalytic capabilities and, thus, may be used by the application analyticservice to determine application analytic information. In addition, oncethe application file has been repacked, the application may be ready tobe launched, or may be further modified by the developer prior to beinglaunched. If the application is ready to be launched, the developer maydecide to sell the application through the online marketplace.

FIG. 3 is not intended to indicate that the steps of the method 300 areto be executed in any particular order, or that all of the steps of themethod 300 are to be included in every case. Further, any number ofadditional steps may be included within the method 300, depending on thespecific application.

FIG. 4 is a block diagram of a basic application analytic system 400that may be used to dynamically provide application analytic information402 in accordance with embodiments. The basic application analyticsystem 400 may be used to implement a basic mode of an applicationanalytic service 404. In some embodiments, the application analyticservice 404 is hosted within a cloud computing environment, as shown inFIG. 4, such as through an online marketplace (not shown). In otherembodiments, the application analytic service 404 is hosted directlywithin a client computing device 406.

The client computing device 406 may be any type of computing device thatis being operated by a user who has been granted access to theapplication analytic information 402 relating to a particularapplication 408. For example, the client computing device 406 may beoperated by the developer of the application 408.

The application 408 may be located within a computing device 410. Inaddition, the application 408 may be located within any number ofadditional computing devices 410. In various embodiments, each user ofthe application 408 may run the application 408 on one or more differentcomputing devices 410. The computing device 410 may be any type ofcomputing device that is capable of running the application 408 such as,for example, a desktop computer, laptop computer, tablet computer, ormobile phone, among others.

In various embodiments, the application 408 is altered by theapplication analytic service 404 prior to the release of the application408. For example, the application 408 may be uploaded to the applicationanalytic service 404 via a network (not shown). The application analyticservice 404 may then perform binary rewriting of the application 408 inorder to include application analytic code within the application file,as discussed above with respect to the method 300 of FIG. 3. Theapplication analytic code may include tracing calls that are includedwithin instrumentation points throughout the program code of theapplication. For example, each function call may include its owninstrumentation point. Once the application 408 has been modified by theapplication analytic service 404, the user of the computing device 410may download the application 408 onto the computing device 410.

When the application 408 is run on the computing device 410, theapplication analytic code, e.g., the tracing calls, may cause thecomputing device 410 to extract application analytic data 412 relatingto each of the instrumentation points. The application analytic data 412may be temporarily stored in a memory device 414 on the computing device410. The memory device 414 can include random access memory (RAM), readonly memory (ROM), flash memory, or any other suitable memory systems.The memory device 414 may store the application analytic data 412 for aspecific period of time, or may only store the application analytic data412 until a session of the application 408 ends.

The application analytic data 412 may then be transferred from thememory device 414 to a storage device 416 on the computing device 410.The storage device 416 can include a hard drive, an optical drive, athumbdrive, an array of drives, or any combinations thereof. In variousembodiments, the storage device 416 stores the application analytic data412 until the application analytic data 412 may be uploaded toapplication analytic data storage 418 within the application analyticservice 404.

The application analytic data storage 418 may be configured to store theapplication analytic data 412 for an extended period of time. Inaddition, the application analytic data storage 418 may storeapplication analytic data 412 relating to the application 408 that isreceived from a number of other computing devices 410. In someembodiments, the application analytic data storage 418 is a database,such as a cloud database.

From the application analytic data storage 418, the application analyticdata 412 may be sent to an application analytic data analyzer 420. Theapplication analytic data analyzer 420 may be configured to generateapplication analytic information 402 from the application analytic data412. In various embodiments, the application analytic data 412 containsthe raw data that is obtained from the application 408, while theapplication analytic information 402 contains detailed informationrelating to the performance of the application 408. For example, theapplication analytic information 402 may include information relating toerrors that are occurring within the application 408, as well asinformation relating to possible causes of the errors that wereidentified based on the application analytic data 412.

The application analytic service 404 may provide the applicationanalytic information 402 to the client computing device 406. The user ofthe client computing device 406, e.g., the developer of the application408, may then modify the application accordingly. For example, if thenumber of users of the application 408 has grown significantly, thedeveloper may decide to add additional backend servers to increase thespeed of the application 408.

FIG. 5 is a block diagram of a custom application analytic system 500that may be used to dynamically provide application analytic informationin accordance with embodiments. Like numbered items are as describedwith respect to FIG. 4. The custom application analytic system 500 maybe used to implement a custom mode of the application analytic service404. The custom mode of the application analytic service 404 may providethe user of the client computing device 406 with additional capabilitiesthat are not provided by the basic mode of the application analyticservice 404.

Within the custom application analytic system 500, the applicationanalytic service 404 may include a remote controller 502. The remotecontroller 502 may be used to adjust the type of application analyticdata 412 that is collected from the application 408. Such an adjustmentmay be performed in response to an input from the user of the clientcomputing device 406, as indicated by arrow 504. For example, the usermay determine what type of application analytic data 412 to collect,such as session info or user info, as well as the manner in which tocollect the application analytic data 412, such as through the use ofcounters or timers, among others. Once the user of the client computingdevice 406 communicates such preferences to the application analyticservice 404, the remote controller 502 may be used to activate ordeactivate each of the instrumentation points within the applicationprogram code.

In some embodiments, the user of the client computing device 406 is adeveloper of the application 408. Thus, the developer of the application408 may use the remote controller 502 to specify the type of applicationanalytic data 412 to collect from the application 408 as it is operatingon the computing device 410, as well as any number of other computingdevices 410.

In various embodiments, the activation or deactivation ofinstrumentation points is accomplished using a policy vector 506. Thepolicy vector 506 may be a vector that is generated by the applicationanalytic service 404 based on the input of the user of the clientcomputing device 406. The policy vector 506 may be used to turninstrumentation points on or off within the application program code.

FIG. 6 is a block diagram of an automatic application analytic system600 that may be used to dynamically and automatically provideapplication analytic information in accordance with embodiments. Likenumbered items are as described with respect to FIGS. 4 and 5. Theautomatic application analytic system 600 may be used to implement anautomatic mode of the application analytic service 404.

Similarly to the custom application analytic system 500, the automaticapplication analytic system 600 may include the remote controller 502.However, instead of generating the policy vector 506 based on the inputof the user of the client computing device 406, as discussed withrespect to the custom application analytic system 500, the policy vector506 is generated automatically by the application analytic service 404.The application analytic service 404 may automatically determine whichinstrumentation points to activate or deactivate based on theapplication analytic information 402 that is generated from theapplication analytic data 412. Further, in various embodiments, theapplication analytic data analyzer 420 assists in the generation of thepolicy vector 506, as indicated by arrow 602.

As an example, within the automatic application analytic system 600, theapplication analytic service 404 may increase the number ofinstrumentation points of a certain type that are activated if it isdetermined that a large number of such instrumentation points arefailing. As another example, the application analytic service 404 mayactivate a number of instrumentation points surrounding a failedinstrumentation point in order to determine whether the error isresulting from a hardware malfunction or a problem within theapplication program code, for example.

Further, within the automatic application analytic system 600, theapplication analytic service 404 may include the capability to performsampling techniques to maximize the amount of application analytic datawhich is collected while minimizing the overhead costs. This may beaccomplished by the application analytic service 404 using any of avariety of application analytic algorithms. The application analyticalgorithms may be used to determine, for example, an appropriatesampling size, an appropriate sampling interval, and an appropriatenumber of sampling instances for collecting the application analyticdata 412 from the application 408.

FIG. 7 is a process flow diagram showing a method 700 for dynamicallyproviding application analytic information in accordance withembodiments. The method 700 may be implemented using the basicapplication analytic system 400, the custom application analytic system500, or the automatic application analytic system 600, or anycombinations thereof. For example, the client may select a basicapplication analytic mode, a custom application analytic mode, or anautomatic application analytic mode via a user interface, and thefunctioning of the application analytic service may be adjusted based onthe selection. Further, the client may change the selected applicationanalytic mode at any point in time. Thus, the method 700 provides forthe dynamic and adaptive collection of application analytic informationaccording to the desires of the particular client.

The method 700 may often involve very little input from the client. Forexample, in the case of the basic mode and the automatic mode of theapplication analytic service, the method 700 may only involve one input,e.g., one mouse click, by the client. In addition, in the case of thecustom mode of the application analytic service, the client may provideas much or as little input as desired. Thus, the application analyticservice imposes a very low burden on the client.

The method begins at block 702, at which instrumentation points areinserted into an application file via an application analytic service.The instrumentation points may be implemented using tracing calls thatare inserted into the application file, or application program code. Thetracing calls may be inserted in to the application file in the form ofapplication analytic code, and each of the tracing calls may relate to aspecific function within the application program code. The tracing callsmay be utilized to collect a variety of different types of informationdepending on the type of tracing call which is used. For example, acounter may be used to determine the number of times a particularfunction is called, while a timer may be used to determine the amount oftime it takes to complete a particular function.

In various embodiments, the insertion of the instrumentation points isachieved via the method 300 discussed above with respect to FIG. 3. Morespecifically, the insertion of the instrumentation points into theapplication file may include performing binary rewriting of theapplication file. Further, once the instrumentation points have beeninserted into the application file, the application may be launchedwithin any number of user computing devices.

At block 704, desired instrumentation points from which to collectapplication analytic data may be dynamically determined via theapplication analytic service. The desired instrumentation points may beactivated, while the undesired instrumentation points may bedeactivated. The manner in which the desired instrumentation points aredetermined depends on whether the application analytic service is in thebasic mode, custom mode, or automatic mode.

In various embodiments, the mode of the application is chosen by theclient, e.g., the application developer or an administrator of themarketplace service in which the application is hosted. If theapplication analytic service is in the basic mode, the applicationanalytic service may simply activate any number of basic instrumentationpoints, which will result in the collection of basic applicationanalytic data. If the application analytic service is in the custommode, the desired instrumentation points may be determined in responseto an input from a client via the client computing device. If theapplication analytic service is in the automatic mode, the applicationanalytic service may automatically determine the desired instrumentationpoints based on an analysis of information about the application, aswell as an analysis of any prior application analytic data that wascollected from the application.

In various embodiments, the activation or deactivation ofinstrumentation points is accomplished using a remote controller that isconfigured to dynamically turn instrumentation points on or off. Theremote controller may activate or deactivate the instrumentation pointsby applying a policy vector to the instrumentation points.

At block 706, application analytic data corresponding to the desiredinstrumentation points may be received at the application analyticservice. In various embodiments, such application analytic data isreceived from a number of computing devices on which the particularapplication is located.

At block 708, the application analytic data may be analyzed to generateapplication analytic information. The generation of the applicationanalytic information may be performed by the application analyticservice using, for example, an application analytic data analyzer.

The application analytic information may include performance profilinginformation that may be used by a client, such as the developer of theapplication, to modify and improve the application. For example, theapplication analytic information may include information about thelocations, dates, and times during which the application has been used,as well as information about the users of the application. Theapplication analytic information may also include information about theapplication sessions, the computing devices on which the application isbeing run, and the application errors that have occurred. Further,application analytic information may include average statistics acrossmultiple sessions of the application.

At block 710, the application analytic information may be sent from theapplication analytic service to the client computing device. The clientmay then use the application analytic information to improve the qualityof the application. For example, the client may be able to targetspecific aspects of the application to change or update based on theapplication analytic information.

In some embodiments, the application analytic information is presentedto the client in terms of time, energy, e.g., batter power, memory, andnetwork. These four conditions may be used by the client to determinethe overall performance of the application based on severalconsiderations, such as the speed of the application and the cost ofrunning the application, among others.

Further, in some embodiments, the application analytic information isalso sent to the online marketplace in which the application is hosted.The online marketplace may use the application analytic information fora variety of purposes, such as, for example, to improve applicationrecommendation procedures.

FIG. 7 is not intended to indicate that the steps of the method 700 areto be executed in any particular order, or that all of the steps of themethod 700 are to be included in every case. Further, any number ofadditional steps may be included within the method 700, depending on thespecific application. For example, the application analytic data may beused to determine a user-perceived transaction delay from the desiredinstrumentation points. For example, the user-perceived transactiondelay may be determined by combining application analytic data obtainedfrom several instrumentation points. The user-perceived transactiondelay may then be sent to the client computing device as a portion ofthe application analytic information.

In some embodiments, the application analytic information that isgenerated according to the method 700 also includes page navigationinformation. Such page navigation information may include, for example,information about the average length of time that users are spending oneach page within the application, as well information about which pagesare being used when users exit the application and which pages are beingswitched to from other pages. The developer may use the page navigationinformation to analyze the manner in which users are navigating throughthe application, and may modify the application accordingly.

Further, in some embodiments, the application analytic informationincludes per function information, e.g., information relating to eachfunction. The per function information may include, for example, thenumber of times each function is being called and the amount of time ittakes to complete each function. The developer may use the per functioninformation to improve the application by targeting specific functionsto modify. For example, if a function execution takes a long time, thedeveloper may make changes to the application to decrease the executiontime of the function.

Although the subject matter has been described in language specific tostructural features and/or methodological acts, it is to be understoodthat the subject matter defined in the appended claims is notnecessarily limited to the specific features or acts described above.Rather, the specific features and acts described above are disclosed asexample forms of implementing the claims.

1. (canceled)
 2. A method for binary rewriting of application files,comprising: unpacking an application file comprising application code;inserting an application analytic agent into the application file;performing a binary rewriting of the application file to insertspecified application analytic code; and repacking the application fileto obtain a new application file comprising the application code and theapplication analytic code.
 3. The method of claim 2, comprisingreceiving the application file at an application analytic service. 4.The method of claim 3, wherein the application analytic service ishosted within an online marketplace.
 5. The method of claim 2,comprising locating an application manifest within the unpackedapplication file.
 6. The method of claim 5, wherein the applicationmanifest comprises one or more metadata files.
 7. The method of claim 6,wherein the application manifest comprises one or more property files.8. The method of claim 2, wherein the application analytic agentcollects application analytic information from one or moreinstrumentation points within the unpacked application file.
 9. Themethod of claim 3, wherein inserting the application analytic agent isperformed by a rewriter of the application analytic service.
 10. Themethod of claim 9, wherein the binary rewriting is performed by therewriter of the application analytic service.
 11. The method of claim 2,wherein the new application file is capable of being executed.
 12. Asystem for binary rewriting of application files, comprising: aprocessor; and a memory comprising instructions that cause the processorto: unpack an application file comprising application code; insert anapplication analytic agent into the application file; perform a binaryrewriting of the application file to insert specified applicationanalytic code; repack the application file to obtain a new applicationfile comprising the application code and the application analytic code;and receive the application file at an application analytic service,wherein the application analytic service is hosted within an onlinemarketplace.
 13. The system of claim 12, wherein the instructions causethe processor to locate an application manifest within the unpackedapplication file.
 14. The system of claim 13, wherein the applicationmanifest comprises: one or more metadata files; and one or more propertyfiles.
 15. The system of claim 12, wherein the application analyticagent collects application analytic information from one or moreinstrumentation points within the unpacked application file.
 16. Thesystem of claim 12, wherein the application analytic agent is insertedby a rewriter of the application analytic service, and wherein thebinary rewriting is performed by the rewriter of the applicationanalytic service.
 17. The system of claim 12, wherein the newapplication file is capable of being executed.
 18. A computer-readablememory storage device for binary rewriting of application files, thestorage device comprising instructions that cause a processor to: unpackan application file comprising application code; insert an applicationanalytic agent into the application file; perform a binary rewriting ofthe application file to insert specified application analytic code;repack the application file to obtain a new application file comprisingthe application code and the application analytic code; receive theapplication file at an application analytic service, wherein theapplication analytic service is hosted within an online marketplace; andlocate an application manifest within the unpacked application file. 19.The computer-readable memory storage device of claim 18, wherein theapplication manifest comprises: one or more metadata files; and one ormore property files.
 20. The computer-readable memory storage device ofclaim 18, wherein the application analytic agent collects applicationanalytic information from one or more instrumentation points within theunpacked application file.
 21. The computer-readable memory storagedevice of claim 18, wherein the new application file is capable of beingexecuted.